От запросов к пайплайнам
Эволюция взаимодействия с моделями крупного масштаба
В предыдущих уроках мы сосредоточились на одношаговых взаимодействиях. Однако реальные приложения требуют больше, чем просто один вопрос и ответ. Чтобы создавать масштабируемые системы ИИ, мы должны перейти к оркестрации. Это включает в себя объединение нескольких вызовов модели, ветвление логики на основе пользовательского ввода и возможность модели взаимодействовать с внешними данными.
Основные элементы оркестрации
- LLMChain: Основной блок. Он объединяет шаблон запроса с языковой моделью.
- Последовательные цепочки: Они позволяют создавать многошаговый процесс, где выход одного шага становится входом следующего.
- Цепочки маршрутизации: Они действуют как «контроллеры трафика», используя языковую модель для определения, какая специализированная подцепочка должна обрабатывать конкретный запрос (например, отправка математического вопроса в «Цепочку по математике» и исторического — в «Цепочку по истории»).
Ключевой принцип: правило цепочки
Цепочки позволяют объединить несколько компонентов — модели, запросы и память — в одну целостную программу. Эта модульность гарантирует, что сложные задачи можно разбить на управляемые, отладочные этапы.
Про-совет: отладка пайплайнов
Когда ваши пайплайны становятся сложными, используйте
langchain.debug = True. Это «рентгеновское зрение» позволяет видеть точные запросы, которые отправляются, и сырые выходные данные, полученные в фоновом режиме на каждом этапе цепочки.TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>
Question 1
In LangChain, what is the primary difference between a
SimpleSequentialChain and a standard SequentialChain?Challenge: Library Support Router
Design a routing mechanism for a specialized bot.
You are building a support bot for a library.
Define the logic for a
Define the logic for a
RouterChain that distinguishes between "Book Recommendations" and "Operating Hours."
Step 1
Create two prompt templates: one for book suggestions and one for library schedule info.
Solution:
book_template = """You are a librarian. Recommend books based on: {input}"""
schedule_template = """You are a receptionist. Answer hours queries: {input}"""
prompt_infos = [
{"name": "books", "description": "Good for recommending books", "prompt_template": book_template},
{"name": "schedule", "description": "Good for answering operating hours", "prompt_template": schedule_template}
]Step 2
Define the
router_template to guide the LLM on how to classify the user's intent, and initialize the chain.Solution:
router_template = MULTI_PROMPT_ROUTER_TEMPLATE.format(
destinations=destinations_str
)
router_prompt = PromptTemplate(
template=router_template,
input_variables=["input"],
output_parser=RouterOutputParser(),
)
router_chain = LLMRouterChain.from_llm(llm, router_prompt)
chain = MultiPromptChain(
router_chain=router_chain,
destination_chains=destination_chains,
default_chain=default_chain,
verbose=True
)